package com.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @author : ranzlupup
 * @date : 2023/3/1 16:14
 */
object RDD_Transform_mapPartitions {
    def main(args: Array[String]): Unit = {
        val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
        val sparkContext: SparkContext = new SparkContext(sparkConf)
        val RDD: RDD[Int] = sparkContext.makeRDD(List(1, 2, 3, 4, 5, 6, 7, 8), 2)

        // TODO RDD转换算子
        //      Value类型
        //      mapPartitions
        // 将待处理的数据以分区为单位发送到计算节点进行处理，
        // 这里的处理是指可以进行任意的处理，哪怕是过滤数据
        val RDD1: RDD[List[Int]] = RDD.mapPartitions(
            (iterator: Iterator[Int]) => {
                println("==================")
                Iterator(List(iterator.max))
            }
        )

        val rdd2: RDD[Int] = RDD.mapPartitions(
            (datas: Iterator[Int]) => {
                println("--------------")
                datas.filter(_ == 2)
            }
        )

        RDD1.collect().foreach(println)
        rdd2.collect().foreach(println)

        sparkContext.stop()
    }

}
